home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / MATH.SWG / 0042_Compute Angles.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-02  |  2KB  |  65 lines

  1. {
  2. LOU DUCHEZ
  3.  
  4. >I'm looking for the way turbo pascal computes the angle.
  5. >Now how can I compute for the Angles C & B.
  6.  
  7. >  b, c, a, B_angle, C_angle: real;
  8.  
  9. >            ┌─┐B angle
  10. >            │ └─────┐      a
  11. >           b│       └─────┐
  12. >            │             └─────┐
  13. >            │A = 90             └─────┐
  14. >            └─────────────────────────┘ C angle
  15. >                       c
  16.  
  17. Okay, you've got b and c.  There is an ArcTan function that returns
  18. an angle in radians.  Try this:
  19. }
  20.  
  21.   b := abs(b);        { these lines keep the operator from getting "cute" }
  22.   c := abs(c);
  23.   if c <> 0 then
  24.   begin        { prevents "division by zero" thing }
  25.     C_angle := arctan(b/c);
  26.     B_angle := (pi/2) - C_angle;  { 90 degrees minus the one angle }
  27.   end
  28.   else
  29.   if b <> 0 then
  30.   begin  { ditto }
  31.     B_angle := arctan(c/b);
  32.     C_angle := (pi/2) - B_angle;
  33.   end
  34.   else
  35.   begin                 { you'll get here only if b = c = 0 }
  36.     B_angle := 0;
  37.     C_angle := 0;
  38.     writeln('That''s a dot, not a triangle!');
  39.   end;
  40. {
  41. Might I recommend that you have the user do data entry in a "repeat" loop,
  42. so that he can get out only when he's put in actual positive values?  I
  43. think you'll discover that a little caution at data-entry time is worth it
  44. in spared headaches later.  (Note all the error-checking I had to do ...)
  45.  
  46. Oh, you wanted degrees, minutes, seconds.  I don't know of any built-in
  47. routines for this (I admit I may have missed something), but here's some
  48. totally untested code to convert radians to degrees, minutes, seconds:
  49. }
  50. procedure r2dms(rad : real; var deg, min, sec : real);
  51. begin
  52.   deg := rad * 180 / pi;    { conversion to degrees }
  53.   min := frac(deg) * 60;    { convert remainder to minutes }
  54.   deg := trunc(deg);        { lose the remainder on degrees }
  55.   sec := frac(min) * 60;    { convert "minutes" remainder to seconds }
  56.   min := trunc(min);        { lose the remainder on minutes }
  57. end;
  58.  
  59. { Here's the reverse journey: }
  60.  
  61. procedure dms2r(deg, min, sec : real; var rad : real);
  62. begin
  63.   rad := pi * (deg + 60 * min + 3600 * sec) / 180;
  64. end;
  65.